home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / MATH / NRPAS13 / PLGNDR.PAS < prev    next >
Pascal/Delphi Source File  |  1991-04-29  |  870b  |  35 lines

  1. FUNCTION plgndr(l,m: integer; x: real): real;
  2. VAR
  3.    fact,pll,pmm,pmmp1,somx2: real;
  4.    i,ll: integer;
  5. BEGIN
  6.    IF ((m < 0) OR (m > l) OR (abs(x) > 1.0)) THEN BEGIN
  7.       writeln('Pause in routine PLGNDR');
  8.       writeln('bad arguments'); readln
  9.    END;
  10.    pmm := 1.0;
  11.    IF (m > 0)  THEN BEGIN
  12.       somx2 := sqrt((1.0-x)*(1.0+x));
  13.       fact := 1.0;
  14.       FOR i := 1 TO m DO BEGIN
  15.          pmm := -pmm*fact*somx2;
  16.          fact := fact+2.0
  17.       END
  18.    END;
  19.    IF (l = m) THEN BEGIN
  20.       plgndr := pmm
  21.    END ELSE BEGIN
  22.       pmmp1 := x*(2*m+1)*pmm;
  23.       IF (l = m+1)  THEN BEGIN
  24.          plgndr := pmmp1
  25.       END ELSE BEGIN
  26.          FOR ll := m+2 TO l DO BEGIN
  27.             pll := (x*(2*ll-1)*pmmp1-(ll+m-1)*pmm)/(ll-m);
  28.             pmm := pmmp1;
  29.             pmmp1 := pll
  30.          END;
  31.          plgndr := pll
  32.       END
  33.    END
  34. END;
  35.